\subsection{ostream}
\myindex{\Cpp!ostream}

Начнем снова с примера типа \q{hello world}, на этот раз используя ostream:

\lstinputlisting[style=customc]{\CURPATH/ostream/1.cpp}

Из практически любого учебника \Cpp, известно, что операцию \TT{<<} можно определить 
(или перегрузить --- \IT{overload}) для других типов.

Что и делается в ostream.
Видно, что в реальности вызывается \TT{operator<<} для ostream:

\lstinputlisting[caption=MSVC 2012 (reduced listing),style=customasmx86]{\CURPATH/ostream/1.asm}

Немного переделаем пример:

\lstinputlisting[style=customc]{\CURPATH/ostream/2.cpp}

И снова, из многих учебников по \Cpp, известно, что результат каждого \TT{operator<<} 
в ostream передается в следующий.

Действительно:

\lstinputlisting[caption=MSVC 2012,style=customasmx86]{\CURPATH/ostream/2_RU.asm}

Если переименовать название метода \TT{operator<<} в \ttf{}, то этот код выглядел бы так:

\begin{lstlisting}[style=customc]
f(f(std::cout, "Hello, "), "world!");
\end{lstlisting}

GCC генерирует практически такой же код как и MSVC.

